package com.recipedb.recipedb.service;

import com.recipedb.recipedb.entity.User;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Optional;

public interface UserService {

    /**
     * 保存用户
     */
    User save(User user);

    /**
     * 根据ID删除用户
     */
    void deleteById(Long id);

    /**
     * 根据ID查找用户
     */
    Optional<User> findById(Long id);

    /**
     * 查询所有用户
     */
    List<User> findAll();

    /**
     * 根据用户名查找用户，不存在返回 null
     */
    User findByUsername(String username);

    /**
     * 判断用户名是否存在
     */
    boolean existsByUsername(String username);

    /**
     * 根据用户ID更新用户名，返回更新后的用户，不存在返回 null
     */
    User updateUsername(Long userId, String newUsername);

    /**
     * 根据用户名获取用户ID，不存在返回 null
     */
    Long getUserIdByUsername(String username);

    /**
     * 根据 uid 或 username 获取用户列表
     */
    List<User> getUsersByUidOrUsername(String uid, String username);

    /**
     * 增减关注、粉丝、点赞数量
     */
    void incrementFollowCount(Long userId);
    void decrementFollowCount(Long userId);
    void incrementFanCount(Long userId);
    void decrementFanCount(Long userId);
    void incrementLikeCount(Long userId);
    void decrementLikeCount(Long userId);

    /**
     * 更新头像，返回新的头像路径，不存在用户返回 null
     */
    String updateAvatar(long id, MultipartFile file);
}
